/**
 * 获取随机id
 */
export function getRandomId() {
	let Num = ''
	for (let i = 0; i < 6; i++) {
		Num += Math.floor(Math.random() * 10)
	}
	return Num
}

//============================================数组数据处理==============================================
/**
 * 排序饼图数据
 */
export function sortPieValue(a, b) {
	// return a.value - b.value //由低到高
	return b.value - a.value //由高到低
}

/**
 * 获取【数组】中的【最大值和最小值】
 */
export function getMaxMinOfArray(arr) {
	const max = Math.max.apply(null, arr)
	const min = Math.min.apply(null, arr)
	return [max, min]
}

/**
 * 获取【数组】中的【最大值和最小值】--zq--用于客群分析指标
 */
export function getMaxMinOfArrayZq(arr) {
	const arrNew = []
	arr.forEach(val => {
		arrNew.push(val.num)
	})
	const max = Math.max.apply(null, arrNew)
	const min = Math.min.apply(null, arrNew)
	return [max, min]
}

//============================================饼图数据处理==============================================
/**
 * 处理饼图数据
 */
export function convertPieChartData(pieArr, nameKey = 'keyName', valueKey = 'num', percentKey = 'ratio') {
	pieArr.forEach((item, index) => {
		item.name = item[nameKey]
		item.value = item[valueKey]
		item.percent = getNumWith2Percent(item[percentKey])
	})
	pieArr.sort(sortPieValue)
	return pieArr
}

//============================================图表数据处理==============================================

/**
 * 获取【多维数组】中【某一列】的【最大值和最小值】
 */
export function getMaxMinOfArrayLine(arr, line = 1) {
	const newArr = getArrayLines(arr)
	newArr[line].splice(0, 1)
	const maxMin = getMaxMinOfArray(newArr[line])
	return maxMin
}

/**
 * 获取【多维数组】的【列数据】
 */
export function getArrayLines(arr) {
	const newArray = arr[0].map(function(col, i) {
		return arr.map(function(row) {
			return row[i]
		})
	})
	return newArray
}

/**
 * 将【集合数据】转换成【二维数组】
 * 'year', 'date', 'num'
 */
export function convertLineChartData(mArr, lineKey, xKey, yKey) {
	const chartData = {}
	if (mArr.length <= 0 || mArr[0].length <= 0) return chartData
	const mDims = ['product']
	const mSource = []
	mArr.forEach((lineItem, lineIdx) => {
		mDims.push(lineItem[0][lineKey])
		lineItem.forEach((groupItem, groupIdx) => {
			if (lineIdx == 0) {
				const sourceItem = {}
				sourceItem.product = groupItem[xKey]
				sourceItem[groupItem[lineKey]] = groupItem[yKey]
				mSource.push(sourceItem)
			} else {
				mSource[groupIdx][groupItem[lineKey]] = groupItem[yKey]
			}
		})
	})
	chartData.dimensions = mDims
	chartData.source = mSource
	return chartData
}

/**
 * 将【数组数据】转换成【二维数组】
 */
export function convertArrToLineChartData(mArr, lineKey, xKey, yKey) {
	// todo 数据为空逻辑待完善
	// 删除pvFlag为空的数据
	for (let i = mArr.length - 1; i >= 0; i--) {
		if (mArr[i].pvFlag == '') {
			mArr.splice(i, 1)
		}
	}
	const chartData = {}
	const mDims = ['product']
	const mSource = []
	mArr.forEach((arrItem, arrIdx) => {
		// 第一步
		let dimsCon = false // 线条类型是否存在
		mDims.forEach((groupItem, groupIdx) => {
			if (groupItem == arrItem.pvFlag) dimsCon = true
		})
		if (!dimsCon) mDims.push(arrItem.pvFlag)
		// 第二步
		let sourCon = false // x 轴是否存在
		mSource.forEach((sourceItem, sourceIdx) => {
			if (sourceItem.product == arrItem.date) sourCon = true
		})
		if (!sourCon) {
			const sourceItem = {}
			sourceItem.product = arrItem.date
			sourceItem[arrItem.pvFlag] = arrItem.pv
			mSource.push(sourceItem)
		} else {
			mSource.forEach((sourceItem, sourceIdx) => {
				if (sourceItem.product == arrItem.date) {
					sourceItem[arrItem.pvFlag] = arrItem.pv
				}
			})
		}
	})
	chartData.dimensions = mDims
	chartData.source = mSource
	return chartData
}

//============================================数字处理==============================================
/**
 * 获取数字保留两位小数
 */
export function getNumWith2Decimal(numVal) {
	return Math.floor(numVal * 100) / 100
}

/**
 * 获取百分比保留两位小数
 * 0.2 -> 20%
 */
export function getNumWith2Percent(numVal) {
	return Math.floor(numVal * 10000) / 100 + '%'
}

//============================================集合处理==============================================
export function swapItems(arr, index1, index2) {
	arr[index1] = arr.splice(index2, 1, arr[index1])[0]
	return arr
}

export function upData(arr, index) {
	let newArr = []
	if (arr.length > 1 && index !== 0) {
		newArr = swapItems(arr, index, index - 1)
	}
	return newArr
}

export function downData(arr, index) {
	let newArr = []
	if (arr.length > 1 && index !== arr.length - 1) {
		newArr = swapItems(arr, index, index + 1)
	}
	return newArr
}
